set nocount on

declare
	 @CodPresupuesto VARCHAR(6)='PR2012'
	,@maxPresupuesto numeric(18,2)=2000000000
	,@minPresupuesto numeric(18,2)=1000000000
	,@maxPCTMAR numeric(18,2)=500000000
	,@minPCTMAR numeric(18,2)=100000000
	,@maxVPCTMAR numeric(18,2)=300000000
	,@minVPCTMAR numeric(18,2)=100000000
	,@maxVALOR_RUBRO_CC numeric(18,2)=0
	,@minVALOR_RUBRO_CC numeric(18,2)=5000000
	,@Temp_PresupuestoInterno numeric(18,2)=0
	,@Temp_VALOR_RUBRO_CC numeric(18,2)=0
	,@Id_PresupuestoAnualEn3Fases int=0
	,@Id_PresupuestoAnualDetalle int=0
	,@direccion varchar(16)='ADELANTE'
delete from PresupuestoAnualDetalle where CodPresupuesto=@CodPresupuesto
delete from PresupuestoAnualEn3Fases where CodPresupuesto=@CodPresupuesto

-- Inicio Session
exec dbo.spSeguridadUsuario @OP='Login',@ParamAuxiliar=NULL,@Id=NULL,@CodRol=NULL,@CodUsuario=NULL,@Login='ADMIN',@UserName=NULL,@Password='admin',@Activo=NULL

-- agrego todos los rubros
exec dbo.spPresupuestoAnualCabecera @OP='AgregarRubrosFaltantesAlPresupuestoEn3Fases',@ParamAuxiliar=NULL,@Id=NULL,@CodPresupuesto=@CodPresupuesto,@Vigencia=NULL,@FechaCreacion=NULL,@FechaUltMod=NULL,@Publicado=NULL,@Activo=NULL

-- Inserto los datos en la tabla PresupuestoAnualEn3Fases
UPDATE
	 PresupuestoAnualEn3Fases 
SET	
	 ValorPPTOCotecmar=ROUND(((@maxPresupuesto - @minPresupuesto -1.00) * RAND(id*100000) + @minPresupuesto), 0)
	,ValorPPTOSaldosPCTMAR=ROUND(((@maxPCTMAR - @minPCTMAR -1.00) * RAND(id*100000) + @minPCTMAR), 0)
	,ValorPPTOSaldosVPCTMAR=ROUND(((@maxVPCTMAR - @minVPCTMAR -1.00) * RAND(id*100000) + @minVPCTMAR), 0)
where 
	CodPresupuesto=@CodPresupuesto

--Agregar Rubros Faltantes Al Presupuesto
exec dbo.spPresupuestoAnualCabecera @OP='AgregarRubrosFaltantesAlPresupuesto',@ParamAuxiliar=NULL,@Id=NULL,@CodPresupuesto=@CodPresupuesto,@Vigencia=NULL,@FechaCreacion=NULL,@FechaUltMod=NULL,@Publicado=NULL,@Activo=NULL

-- coloco todos los cc del detalle en cero
update 
	PresupuestoAnualDetalle
set
	 ValorInicialPresupuesto=0
	,ValorActualPresupuesto=0
	,ValorEjecutado=0.00
	,ValorPendienteEjecutar=0
	,ValorFacturado=0.00
	,PorcEjecutado=0.000
	,PorcPendienteEjecutar=0
	,PorcFacturado=0.000
	,Activo=1
	,Usuario='ADMIN'			
where
	CodPresupuesto=@CodPresupuesto

--asigno los valores a los centros de costo asociados a cada rubro
while @Id_PresupuestoAnualEn3Fases<(select top 1 id from PresupuestoAnualEn3Fases where Id>@Id_PresupuestoAnualEn3Fases order by Id asc)
begin
	-- obtengo el id del PresupuestoAnualEn3Fases
	select top 1 
		 @Id_PresupuestoAnualEn3Fases=id
		,@Temp_PresupuestoInterno=ValorPPTOCotecmar-ValorPPTOSaldosPCTMAR-ValorPPTOSaldosVPCTMAR 
		,@maxVALOR_RUBRO_CC=ValorPPTOCotecmar-ValorPPTOSaldosPCTMAR-ValorPPTOSaldosVPCTMAR 
	from 
		PresupuestoAnualEn3Fases 
	where 
		Id>@Id_PresupuestoAnualEn3Fases
	order by 
		Id asc
	
	--print @Id_PresupuestoAnualDetalle
		
	--asigno los valores a los centros de costo asocados a cada rubro
	while 
		@Temp_PresupuestoInterno>=0 
		AND
		( 
			(
			@direccion='ADELANTE' AND
			@Id_PresupuestoAnualDetalle<(select top 1 pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id>@Id_PresupuestoAnualDetalle order by pad.Id asc)
			)
			OR			
			(
			@direccion='REVERSA' AND
			@Id_PresupuestoAnualDetalle>(select top 1 pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id<@Id_PresupuestoAnualDetalle order by pad.Id DESC)
			)
		)	
	begin
		IF @direccion='ADELANTE'
		BEGIN
			select top 1 @Id_PresupuestoAnualDetalle=pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id>@Id_PresupuestoAnualDetalle order by pad.Id asc	
		END
		ELSE IF @direccion='REVERSA'
		BEGIN
			select top 1 @Id_PresupuestoAnualDetalle=pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id<@Id_PresupuestoAnualDetalle order by pad.Id desc				
		END	
				
		-- esperar un tiempo para que los resultado no sean iguales
		WAITFOR DELAY '00:00:00.05'
		
		select @Temp_VALOR_RUBRO_CC=ROUND(((@maxVALOR_RUBRO_CC - @minVALOR_RUBRO_CC -1) * RAND() + @minVALOR_RUBRO_CC), 0)
		
		select 
			@Temp_PresupuestoInterno as Temp_PresupuestoInterno,@Temp_VALOR_RUBRO_CC as Temp_VALOR_RUBRO_CC,*
		from 
			PresupuestoAnualDetalle	
		where
			Id=@Id_PresupuestoAnualDetalle
			
			
		update 
			PresupuestoAnualDetalle
		set
			 ValorInicialPresupuesto=CASE WHEN @Temp_PresupuestoInterno<@Temp_VALOR_RUBRO_CC THEN @Temp_PresupuestoInterno else @Temp_VALOR_RUBRO_CC end
			,ValorActualPresupuesto=CASE WHEN @Temp_PresupuestoInterno<@Temp_VALOR_RUBRO_CC THEN @Temp_PresupuestoInterno else @Temp_VALOR_RUBRO_CC end
			,ValorEjecutado=0.00
			,ValorPendienteEjecutar=CASE WHEN @Temp_PresupuestoInterno<@Temp_VALOR_RUBRO_CC THEN @Temp_PresupuestoInterno else @Temp_VALOR_RUBRO_CC end
			,ValorFacturado=0.00
			,PorcEjecutado=0.000
			,PorcPendienteEjecutar=100.000
			,PorcFacturado=0.000
			,Activo=1
			,Usuario='ADMIN'			
		where
			Id=@Id_PresupuestoAnualDetalle
			
		set @Temp_PresupuestoInterno=@Temp_PresupuestoInterno-@Temp_VALOR_RUBRO_CC
		
		IF 
			@Temp_PresupuestoInterno>=0 
			AND	@direccion='ADELANTE' 
			AND NOT EXISTS (select top 1 pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id>@Id_PresupuestoAnualDetalle order by pad.Id asc)				
		BEGIN
			SELECT TOP 1 @Id_PresupuestoAnualDetalle=pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id>@Id_PresupuestoAnualDetalle order by pad.CodCentroCosto asc	
			set @direccion='REVERSA' 
		END
		ELSE IF 
			@Temp_PresupuestoInterno>=0 
			AND	@direccion='REVERSA' 
			AND NOT EXISTS (select top 1 pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id<@Id_PresupuestoAnualDetalle order by pad.Id DESC)
		BEGIN
			SELECT TOP 1 @Id_PresupuestoAnualDetalle=pad.id from PresupuestoAnualEn3Fases p3f inner join PresupuestoAnualDetalle pad on p3f.CodPresupuesto=pad.CodPresupuesto and p3f.CodRubro=pad.CodRubro where p3f.Id=@Id_PresupuestoAnualEn3Fases and pad.Id<@Id_PresupuestoAnualDetalle order by pad.CodCentroCosto desc
			set @direccion='ADELANTE' 
		END
	END
end	


--SELECT
--	 ValorPPTOCotecmar=ROUND(((2000000000 - 1000000000 -1) * (RAND(id*10000000)) + 1000000000), 0)
--	,ValorPPTOSaldosPCTMAR=ROUND(((300000000 - 100000000 -1) * (RAND(id*1000000)) + 100000000), 0)
--	,ValorPPTOSaldosVPCTMAR=ROUND(((200000000 - 10000000 -1) * (RAND(id*1000000)) + 10000000), 0)
--FROM
--	PresupuestoAnualEn3Fases 	
--where 
--	CodPresupuesto='PR2012'
	--and ValorPPTOCotecmar=0
	
--select * FROM PresupuestoAnualEn3Fases where CodPresupuesto='PR2012'
--select * FROM PresupuestoAnualDetalle where CodPresupuesto='PR2012'
	